package com.buka.menu.service;

import com.buka.menu.dao.MenuDao;
import com.buka.menu.entity.Menu;
import com.buka.menu.entity.RoleMenu;
import com.buka.role.entity.Role;
import com.buka.role.service.RoleService;

import java.util.List;
import java.util.stream.Collectors;

public class MenuService {
    MenuDao menuDao = new MenuDao();

    public List<Menu> listByUserId(Long userId) {
        //先获取用户角色
        RoleService roleService = new RoleService();
        //设计时 应该考虑一个用户对用多个角色
        List<Role> roles = roleService.selectByUserId(userId);

        //提取角色集合中的角色id    角色id 的集合

        //第3步  使用角色ID，查询t_role_menu  获取当前角色所对应的菜单的id
        //处理角色集合，将集合中的角色id转换成字符串
        String ridStr = roles.stream().map(role -> role.getId().toString())
                .collect(Collectors.joining(","));



        //根据角色id,查询角色菜单关联关系表，得到的是角色菜单关联关系对象的集合
        List<RoleMenu> roleMenus = menuDao.listRoleMenuByRids(ridStr);
        //处理 List<RoleMenu>  得到菜单集合 再将菜单集合转为字符串
        String midStr = roleMenus.stream()
                .map(roleMenu -> roleMenu.getMid().toString())
                .collect(Collectors.joining(","));
        //第4步，使用菜单字符串，查询菜单表，得到菜单集合
        return menuDao.listByIds(midStr);
    }

}
